草庐IT

MIPS 指令

全部标签

c++ - 是否可以在intel/64位win7上的32位应用程序中使用64位指令

我的环境是64位win7,VC2010。当然,里面的intel是64位的CPU。我可以在32位应用程序中使用64位指令/本地机器字(64位)吗?由于我的大部分代码都是32位的,所以我不想将其移植到64位。对于一些性能关键的热代码,我想通过编译器内部或内联汇编手动优化它(另外64位VC编译器不支持内联汇编),是否可以运行64位代码foxexamplemovrax,32位模式应用程序中的rbx? 最佳答案 实际上,您可以。用于从32位模式切换到64位模式的机制(显然必须存在于能够运行32位代码的64位操作系统上)不受任何保护,可以从用户

c++ - C++中的宏和预处理器指令有什么区别

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Differencebetweenmacroandpreprocessor我对C++中的宏指令和预处理器指令有疑问,它们之间有什么区别?看起来他们或多或少是一样的?我试着在网上查了一下,但还是看不懂,谁能帮忙?

c++ - 编译器是否将给定常量参数的简单函数简化为唯一指令?

我一直认为这是真的,但从未得到任何验证。考虑一个非常简单的函数:intsubtractFive(intnum){returnnum-5;}如果对该函数的调用使用编译时常量,例如getElement(5);打开优化的编译器很可能会内联它。然而,我不清楚的是,如果num-5将在运行时或编译时进行评估。表达式简化会以这种方式通过内联函数递归扩展吗?还是不超越功能? 最佳答案 我们可以简单的看一下生成的程序集就知道了。这段代码:intsubtractFive(intnum){returnnum-5;}intmain(intargc,char

c++ - C++ int 操作在 mips 架构上是原子的吗

我想知道我是否可以在不锁定mipscpu(尤其是Amazon或Danube)的情况下读取或写入共享int值。我的意思是如果这样的读取或写入是原子的(其他线程不能中断它们)。需要明确的是-我不想阻止线程之间的竞争,但我关心int值本身是否未损坏。假设编译器将所有int对齐到cpu字的边界,这应该是可能的。我使用gcc(g++)。测试还表明它似乎工作正常。但也许有人肯定知道? 最佳答案 使用gcc的内置原子操作,如果它们不受支持,您将收到警告:http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Ato

c++ - 从 Unix 迁移到 Linux 时 Makefile Include 指令

我的任务是将古老的基于C++的代码从Unix环境迁移到Linux。该项目由多个Makefile组成,用于库的不同“模块”。我已经解决了一些问题,但是现在在使用include指令时遇到了问题。显然,Makefile的构造方式是为不同的文件使用单独包含指令,并且它在Unix服务器中运行了多年。例如:include../../../../util/genmake.defprocessControl.slOBJS=processControl.ooutputControlOBJS=outputControl.oinputControlOBJS=inputControl.ocleanList=*

c++ - MIPS 上 pthreads 中的段错误

我正在尝试在MIPSLinux机器上运行我的代码(小端,没有硬件float):#cat/proc/cpuinfo|grepmodelcpumodel:MIPS24KcV5.5我的程序在x86和ARM系统上运行良好,但在MIPS上因段错误而崩溃,总是在(或接近)pthreads库函数调用中。我尝试了两个工具链(来自here的MTIGNU/Linux工具链MIPS32R2-MIPS32R5和来自here的SourceryCodeBenchLite2016.05-8)——细节略有不同,但段错误总是发生。阅读邮件列表我发现了MIPS平台上pthreads段错误的两个原因:在uClibc的MIP

c++ - vector 迭代编译成非常不同的指令

令我惊讶的是,使用最新的编译器对vector进行迭代会针对相同的结果显示截然不同的代码。这是代码:voidfun1(vector&a,unsignednum){for(auto&&value:a){value+=num;}}voidfun2(vector&a,unsignednum){for(uint32_tx=0,p=a.size();x&a,unsignednum){for(uint32_tx=0;x&a,unsignednum){for(autoit=a.begin();it!=a.end();++it){*it+=num;}}voidfun5(vector&a,unsigned

c++ - 为什么我们使用预处理器指令来定义变量?

我有一段代码是这样的:/*Tmatrix*/#defineT110#defineT12_re1#defineT12_im2intmain(intargc,char*argv[]){return1;}我的问题是为什么它使用预处理器指令来定义全局变量而不是简单地使用这样的代码:/*Tmatrix*/doubleT11=0;doubleT12_re=1;doubleT12_im=2;intmain(intargc,char*argv[]){return1;} 最佳答案 预处理器符号不是变量。在您的第一个代码中,T13_im(等...)不是

c++ - 我们可以记录给cpu的指令吗?

给定内存中用户驱动程序的初始状态,我们能否记录下给cpu的指令,将程序重新加载到它的初始状态并播放cpu指令,让程序像用户使用时那样运行它,没有用户存在?如果这个问题写得不好或令人困惑,我很抱歉。 最佳答案 如果用户确实与程序进行了交互,而您没有存储输入(或其他形式的交互)的历史记录,那么答案显然是否定的。完整的执行轨迹可能非常庞大(每秒1Giga指令...) 关于c++-我们可以记录给cpu的指令吗?,我们在StackOverflow上找到一个类似的问题:

c++ - 如何在 Skylake 架构上最大化 sqrt-heavy-loop 的指令级并行性?

为了向自己介绍x86内在函数(以及较小程度上的缓存友好性),我明确矢量化了一些用于基于RBF(径向基函数)的网格变形的代码。发现vsqrtpd是主要瓶颈后,我想知道是否/如何进一步掩盖其延迟。这是标量计算内核:for(size_ti=0;inPt是目标坐标的数量,它比nCP是源坐标/位移的数量大得多。后者适合L3,因此最内层的循环总是在源点上。第一个优化步骤是同时处理4个目标点。源点数据仍然通过标量加载然后广播访问。第二步是通过阻止循环来瞄准L1,阻止i-loop在某种程度上比阻止j-loop重要得多,j-loop只带来了微小的改进。最内层循环仍在j之上以减少负载/存储。第三是加载4个